<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // var arr = []
        // for (var i = 0; i < 2; i++) {
        //     arr[i] = function () {
        //         console.log(i);
        //     }
        // }
        // arr[0]()//2
        // arr[1]()//2
        // 循环里var声明的变量为全局变量。i = 2时循环终止。然后往下执行调用数组里的函数 函数里的执行代码是打印i 所以结果都是2  因为此时i为全局变量 之前的都被覆盖掉了

        let arr = []
        for (let i = 0; i < 2; i++) {
            arr[i] = function () {
                console.log(i);
            }
        }
        arr[0]()//0
        arr[1]()//1
        // 每次循环都产生一个块级作用域 每个块级作用域的变量值都会不同  那么循环所产生的两个函数的i值就是独立的 也就是 0 和 1 对应的 也是循环产生的块级作用域下的i值
    </script>
</body>

</html>